-------------------------------------- Chapitre IV - dotNET ---------------------------------------
Analyse sous Ollydbg - 2/4
Fig.7
Fig.8
Nos soupçons se confirment et les 2 prochains récupèrent l’eMail et sa longueur, puis le Registration Code afin de contrôler si les champs ne sont pas vides. Continuons de tracer pour s’en assurer.On arrive là :
Fig.9
Maintenant que nous sommes prêts, on remarque tout de suite que nous serions passés au-dessus du CALL d’où l’on vient
en $+B6, si le saut avait été pris en $+75…(Fig.7) On peut donc imaginer
qu’il va être intéressant d’aller voir ce qu’il va se passer dans le CALL en $+6E. Posons-y donc
un BP [F2] (Notez que si vous redémarrez la cible dans Olly, les BP ne seront pas conservés étant donné que toutes les adresses
auront changées, il vous faudra reprendre depuis le début…)
Jetons un œil un peu plus haut encore, et nous remarquons encore une fois quelque chose d’intéressant … On y aperçoit 3 occurrences
successives de ces 2 lignes :
CALL DWORD PTR DS:[EAX+164]
CMP DWORD PTR DS:[EAX+8],0
Tiens tiens, comme c’est étrange, nous avons justement rempli 3 champs pour l’enregistrement, et ici, on teste 3 fois si une valeur est non
nulle… « O…D…I…L… je me demande ce qu'il voulait nous dire » (Ok, je sors !).
Posons un BP là aussi !
Bon nous avons assez d’éléments pour tester notre flair. Et pendant que je suis dans les répliques :
« -Et Chef ?
-Oui mon petit ?
-Comment on fait pour devenir Chef, Chef ?
-Le flair mon petit…le flair ! »
C’est promis, c’était le dernier, après j’arrête.
On lance la bête [F9]on clique sur OK quand la MessageBox apparaît et revérifie notre Serial, pour voir si on break bien où on l’espère.
Bam, Olly break en $+E sur le premier CALL DWORD PTR DS :[EAX+164], on fait un petit F8 pour voir ce qu’il en ressort.
Premier signe positif, la valeur comparée à 0 est 0Ah (soit 10d, ce qui correspond à la longueur de mon Name : Papa Bango).
Dans la fenêtre des registres, faîtes un clic droit sur EAX (qui contient la valeur de retour de la fonction), puis « Follow in Dump
» (Fig.8).
Continuons de tracer. Laissons tomber le premier CALL rencontré… en observant la fenêtre de dump, on comprend qu’il ne fait que récupérer une seconde fois les informations d’enregistrement, et entrons donc dans le CALL à l’adresse $6E (F7), puis passons à nouveau en adresse relative sur le PUSH EBP où l’on arrive.
Fig.10
Les premières instructions, vous l’aurez compris, vérifient une nouvelle fois, la valeur non nulle des trois champs…Quelle redondance
le .NET ! Je ne sais pas si c’est lié au fait que ce soit programmé en .NET, mais on commence à mieux saisir l’intérêt
d’utiliser un désassembleur adapté au langage…encore faut-il le comprendre
Rentrons maintenant dans le Call.
Vous voyez que cette analyse sous Olly, comme je le disais en prélude, est "intuitive" et peut difficilement être méthodologiquement
expliquée.
Pour éviter de vous donner la marche étape par étape à coup de 12 F7, 3 F8, à droite puis à gauche...STOP! C'est
là.... je vous donnerai les étapes grossières puis vous travaillerez tout seul
.
A ce stade on tombe dans une routine:
Fig.11